module register_file(
	input wire clk,          // 时钟信号
	input wire enable,       // 使能信号
	input wire privilege,    // 特权级信号
	input wire [1:0] op_type,// 操作类型信号
	input wire [4:0] addr,   // 地址信号
	inout wire [63:0] data   // 双向数据引脚
);

// 内部寄存器定义
reg [63:0] reg_group0[31:0]; // 第一组寄存器，共32个，每个64位
reg [63:0] reg_group1[31:0]; // 第二组寄存器，共32个，每个64位
reg [4:0] i;

// 三态缓冲区，用于控制双向数据引脚的读写
assign data = (op_type == 2'b00) ? ((privilege == 1'b0) ? reg_group0[addr] : reg_group1[addr]) : 64'bz;

// 寄存器文件操作逻辑
always @(posedge clk) begin
	i <= 5'b0;
	if (enable) begin
		case (op_type)
			2'b00: begin // 读取操作
				// 读取操作已在三态缓冲区中实现，此处无需额外操作
			end
			2'b01: begin // 写入操作
				if (privilege == 1'b0) begin
					reg_group0[addr] <= data;
				end else begin
					reg_group1[addr] <= data;
				end
			end
			2'b10: begin // 同步操作
				if (privilege == 1'b0) begin
					for (i = 0; i < 32; i = i + 1) begin
						reg_group1[i] <= reg_group0[i];
					end
				end else begin
					for (i = 0; i < 32; i = i + 1) begin
						reg_group0[i] <= reg_group1[i];
					end
				end
			end
			2'b11: begin // 清零操作
				for (i = 0; i < 32; i = i + 1) begin
					reg_group0[i] <= 64'b0;
					reg_group1[i] <= 64'b0;
				end
			end
			default: begin
				// 非法操作类型，不做任何操作
			end
		endcase
	end
end

endmodule